module NavigationHelpers
  def path_to(page_name)
    case page_name


    when /p[aá]gina (?:inicial|principal)/
      root_path

    when /p[aá]gina de listagem de funcion[aá]rios/
      "/funcionarios"
      
    when /p[aá]gina de cria[cç][aã]o de novo funcion[aá]rio/
      "/funcionarios/new"
      
    when /p[aá]gina de visualiza[cç][aã]o do funcion[aá]rio de login "([^"]*)"/
      f = Funcionario.find_by_login($1)
     "/funcionarios/#{f.id}"
     
    when /p[aá]gina de edi[cç][aã]o do funcion[aá]rio de login "([^"]*)"/
      f = Funcionario.find_by_login($1)
     "/funcionarios/#{f.id}/edit"
      
    when /p[aá]gina de remessa especial criada/
      "/remessas/remessa_especial_criada"

    when /p[aá]gina de pedido de upload de foto/
      "/necessita_upload_foto"

    when /p[aá]gina de remessas especiais/
      "/remessas/remessas_especiais"

    when /p[aá]gina de cartoes especiais/
      "/cartoes/visualizar_cartoes_especiais"

    when /p[aá]gina de cartoes/
      "/cartoes/visualizar_cartoes"

    when /p[aá]gina de configuração do sistema/
      "/configuracoes"

    when /p[aá]gina de (?:geração|criação) de pedido pelo usu[aá]rio/
      novo_pedido_usuario_path

    when /p[aá]gina de relat[oó]rio de pedidos/
      relatorio_pedidos_path

    when /p[aá]gina de processar arquivo de retorno da remessa/
      "/remessas/processar_arquivo_de_retorno"

    when /p[aá]gina de pedidos do usu[aá]rio/
      index_pedido_usuario_path

    when /p[áa]gina de cancelamento de cart[oõ]es especiais/
      informar_perda_ou_roubo_especial_path

    when /p[áa]gina de cancelamento de cart[oõ]es pelo operador/
      informar_perda_ou_roubo_path

    when /p[áa]gina de cancelamento de cart[oõ]es pelo usu[aá]rio/
      informar_perda_roubo_usuario_path

    when /p[áa]gina de cria[cç][aã]o de remess(?:a|as) automatizad(?:a|as)/
      remessas_automatizadas_path

      # Paths para remessas especiais
    when /p[aá]gina de visualiza[cç][aã]o d[aeo] remess(?:a|as) especia(?:l|is) com id "(.*)"/
      remessa = Remessa.find($1)
      "/remessas/#{remessa.id}/show_remessa_especial"

      # Path genérico para as páginas de cadastro. Funciona com todos os modelos
      # exemplo: "página de criação de filiais", "página de criação do pedido", "página de criação de vínculo cartão"
      # A linha "$1.tr(" ", "_").remover_acentos.pluralize" pega a string do modelo passado, retira os espaços e acentos e bota no plural
    when /p[aá]gina de criação de (.*)/
      "/#{$1.tr(" ", "_").remover_acentos.pluralize}/new"

      # Path genérico para as páginas de show. Funciona com todos os modelos
      # exemplo: 'página de visualização de status_pedido com id "1"' (precisa das aspas)
    when /p[aá]gina de visualização d(?:a|e|o) (.*) com id "(.*)"/
      "/#{$1.tr(" ", "_").remover_acentos.pluralize}/#{$2}"

      # Path genérico para as páginas de edição. Funciona com todos os modelos
      #    when /p[aá]gina de edi[çc][aã]o d[aeo] (.*) com id "(.*)"/
      #      "/#{$1.tr(" ", "_").remover_acentos.pluralize}/#{$2}/edit"


      # Incluir paths aqui
      # 
      # Paths para procurar uma filial pelo nome
#    when /p[aá]gina de visualiza[cç][ãa]o d(?:a|e|o) filia(?:l|is) com nome "(.*)"/
#      filial = Filial.find_by_nome_fantasia($1).first
#      "/filiais/#{filial.id}"
#    when /p[aá]gina de edição d(?:a|e|o) filia(?:l|is) com nome "(.*)"/
#      filial = Filial.find_by_nome_fantasia($1).first
#      "/filiais/#{filial.id}/edit"

      
    when /p[aá]gina de visualiza[cç][ãa]o d(?:a|e|o) (\w*) com (\w*) "(.*)"/
      resultado = $1.singularize.camelize.constantize.where("#{$2} = ?", $3).all.first
      "/#{$1.pluralize.underscore}/#{resultado.id}"

    when /p[aá]gina de edi[cç][ãa]o d[aeo] (\w*) com (\w*) "(.*)"/
      resultado = $1.singularize.camelize.constantize.where("#{$2} = ?", $3)
      "/#{$1.pluralize.underscore}/#{resultado.first.id}/edit"


      # Paths para procurar um Status Pedido pela descricao
    when /p[aá]gina de visualização d(?:a|e|o) status(?:\s|_)pedido com descricao "(.*)"/
      status = StatusPedido.por_descricao($1).first
      "/status_pedido/#{status.id}"
    when /p[aá]gina de edição d(?:a|e|o) status(?:\s|_)pedido com descricao "(.*)"/
      status = StatusPedido.por_descricao($1).first
      "/status_pedido/#{status.id}/edit"

      # Paths para procurar um Pedido pelo iduff
    when /p[aá]gina de visualização d(?:a|e|o) identificacao com iduff "(.*)"/
      ident = Pub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLogin.por_iduff($1).first
      "/identificacoes_login/#{ident.id}"

    when /p[aá]gina de edição d(?:a|e|o) pedido com identificacao com iduff "(.*)"/
      identificacao = Pub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLoginPub::IdentificacaoLogin.por_iduff($1).first
      ped = Pedido.por_identificacao_login_id(identificacao).first
      "/pedidos/#{ped.id}/edit"


      # Path para pegar o status pedido mais recente (com o maior id)
    when /p[aá]gina de visualização d(?:a|e|o) status(?:\s|_)pedido mais recente/
      status_pedido = StatusPedido.last
      "/status_pedido/#{status_pedido.id}"

      # Path para pegar o status retorno banco mais recente (com o maior id)
    when /p[aá]gina de visualização d(?:a|e|o) status(?:\s|_)retorno(?:\s|_)banco mais recente/
      status_retorno_banco = StatusRetornoBanco.last
      "/status_retorno_banco/#{status_retorno_banco.id}"

      # Path para pegar a identificaçãi mais recente (com o maior id)
    when /p[aá]gina de visualização d(?:a|e|o) identificacao mais recente/
      identificacao = Identificacao.last
      "/identificacaos/#{identificacao.id}"


      # Path genérico para as páginas index de qualquer modelo.
      # ATENÇÃO: Não incluir nenhum path abaixo deste
    when /p[aá]gina d?[aeo]?\s?(.*)/
      "/#{$1.tr(" ", "_").remover_acentos.pluralize}"

      # When everything else fails
    else
      begin
        page_name =~ /p[aá]gina d(a|e|o) (.*)/
        path_components = $1.split(/\s+/)
        self.send(path_components.push('path').join('_').to_sym)
      rescue Object => e
        raise "Não existe nenhum path para a página \"#{page_name}\".\n" +
          "Adicione o path no #{__FILE__}"
      end
    end
  end
end

World(NavigationHelpers)
